package com.molichuxing.services.business.service;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.service.RootService;
import com.molichuxing.services.business.dto.request.create.OrderEnterpriseCreateBizDto;
import com.molichuxing.services.business.dto.request.create.OrderEnterpriseLeaseConfirmBizDto;
import com.molichuxing.services.business.dto.request.modify.EnterprisePayModifyBizDto;
import com.molichuxing.services.business.dto.request.modify.EnterpriseRenewLeaseModifyBizDto;
import com.molichuxing.services.business.dto.response.EnterpriseRenewBizDto;
import com.molichuxing.services.business.dto.response.OrderEnterpriseBizDto;
import com.molichuxing.services.business.dto.response.OrderEnterpriseCarBizDto;
import com.molichuxing.services.business.dto.response.OrderTradeFlowBizDto;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 企业订单biz service
 *
 * @Author zoumingyu
 * @Date 2020年06月08日
 */
public interface OrderEnterpriseBizService extends RootService {

    /**
     * 新增企业订单
     *
     * @param createBizDto 新增信息
     * @return Long 订单号
     */
    Long create(OrderEnterpriseCreateBizDto createBizDto);

    /**
     * 支付完成修改企业订单信息
     *
     * @param modifyBizDto 修改信息
     * @return boolean
     */
    boolean modifyPay(EnterprisePayModifyBizDto modifyBizDto);

    /**
     * 分页获取企业订单信息
     *
     * @param params   listType：列表类型-enum <br/>
     *                 orderStatus：订单状态-enum <br/>
     *                 orderCode：订单号-long <br/>
     *                 userIds：用户id-list <br/>
     *                 storeIds：门店id-list <br/>
     *                 orderTimeStart：下单开始时间-LocalDateTime <br/>
     *                 orderTimeEnd：下单结束时间-LocalDateTime
     * @param pageNum  页数
     * @param pageSize 每页条数
     * @return
     * @throws Exception
     */
    Paged<OrderEnterpriseBizDto> getOrderList(Map<String, Object> params, int pageNum, int pageSize)
            throws Exception;

    /**
     * 分页获取企业订单信息
     *
     * @param params   listType：列表类型-enum <br/>
     *                 orderStatus：订单状态-enum <br/>
     *                 orderCode：订单号-long <br/>
     *                 userIds：用户id-list <br/>
     *                 storeIds：门店id-list <br/>
     *                 orderTimeStart：下单开始时间-LocalDateTime <br/>
     *                 orderTimeEnd：下单结束时间-LocalDateTime
     * @param pageNum  页数
     * @param pageSize 每页条数
     * @return
     * @throws Exception
     */
    Paged<OrderEnterpriseCarBizDto> getOrderEnterpriseCarList(Map<String, Object> params, int pageNum, int pageSize)
            throws Exception;


    /**
     * 起租确认
     *
     * @param toOrderEnterpriseLeaseConfirmBizDto
     * @return
     */
    Boolean leaseConfirm(OrderEnterpriseLeaseConfirmBizDto toOrderEnterpriseLeaseConfirmBizDto);

    /**
     * 查询到期订单（如有续订，包含续订信息）
     *
     * @param leaseExpire 到期日
     * @return
     */
//    List<EnterpriseExpireBizDto> getExpire(LocalDate leaseExpire);

    /**
     * 获取续订单信息
     *
     * @param leaseInception 起租日
     * @return
     */
    List<EnterpriseRenewBizDto> getRenewLease(LocalDate leaseInception);

    /**
     * 续订订单起租修改
     *
     * @param modifyBizDto 修改信息
     * @return
     */
    boolean modifyRenewLease(EnterpriseRenewLeaseModifyBizDto modifyBizDto);

    /**
     * 根据车辆ID获取订单信息
     *
     * @param carId
     * @return
     */
    List<OrderEnterpriseBizDto> getListByCarId(Integer carId);

    /**
     * 获取订单流转信息
     *
     * @param orderCode 订单号
     * @return
     * @throws Exception
     */
    List<OrderTradeFlowBizDto> getOrderFlow(Long orderCode) throws Exception;
}
